﻿using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using System.Collections;
using Sinacor.Servico.Bovespa.Ordens;
using Sinacor.Infra.Service.Common;


namespace Sinacor.Servico.Bovespa.Ordens.BusinessLogic
{
    public class OrdemDigitacao : BaseBusinessLogic
    {
        public bool Inserir(List<BusinessEntity.OrdemDigitacao> pListOrdemDigitacao)
        {
            ResourceAccess.OrdemDigitacao raOrdemDigitacao = new ResourceAccess.OrdemDigitacao();
            foreach (BusinessEntity.OrdemDigitacao  oOrdemDigitacao  in pListOrdemDigitacao)
            {
                switch (oOrdemDigitacao.TipoOrdemDistribuicao)
                {
                    case BusinessEntity.Enum.TipoOrdemDistribuicao.AdministradoConcorrente:
                        {
                            BusinessLogic.Negocio validarEstadoSistema = new Negocio();
                            validarEstadoSistema.ValidarEstadoSistema(Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.ModuloChamador.ControleOrdens);

                            raOrdemDigitacao.InserirDistribuicao(oOrdemDigitacao);
                            raOrdemDigitacao.ExecutarDistribuicaoAdministradoConcorrente(oOrdemDigitacao);
                            break;
                        }
                    case BusinessEntity.Enum.TipoOrdemDistribuicao.POP:
                        {
                            BusinessLogic.Negocio validarEstadoSistema = new Negocio();
                            validarEstadoSistema.ValidarEstadoSistema(Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.ModuloChamador.ControleOrdens);

                            raOrdemDigitacao.InserirDistribuicao(oOrdemDigitacao);
                            raOrdemDigitacao.ExecutarDistribuicaoPOP(oOrdemDigitacao);                            
                            break;
                        }
                    default:
                        break;
                }
            }
            return true;
        }

        public List<BusinessEntity.OrdemDigitacao> ConsultarOrdemDigitacao(BusinessEntity.Parameter.ConsultarOrdemDigitacao pConsultarOrdemDigitacao)
        {
            List<BusinessEntity.OrdemDigitacao> response = (new Sinacor.Servico.Bovespa.Ordens.ResourceAccess.OrdemDigitacao()).ConsultarOrdemDigitacao(pConsultarOrdemDigitacao);
            return response;
        }



        public List<BusinessEntity.OrdemDigitacao> ConsultarOrdemDigitacaoLote(BusinessEntity.Parameter.ConsultarOrdemDistribuicaoOrdemLote pConsultarOrdemDigitacaoLote)
        {

            List<BusinessEntity.OrdemDigitacao> response = (new Sinacor.Servico.Bovespa.Ordens.ResourceAccess.OrdemDigitacao()).ConsultarOrdemDigitacaoLote(pConsultarOrdemDigitacaoLote);
            return response;
        }


        // WAbreu.7COMm
        // 2008-08-20 16:51
        // TASK 1288
        /*
            recebe uma lista de Parameter.ExcluirOrdemDigitacao

            Verifca se é POP ou administrado concorrente.
            Varre a lista e chama o metodo Excluir da 

            // PARA CASOS QUE SEJAM DO TIPO 'POP'
            ResourceAccess.OrdemDigitacao.ExcluirPOP
            ResourceAccess.OrdemDigitacao.ExecutarDistribuicaoPOP
            // CASO SEJA ADMINISTRADO CONCORRENTE
            ResourceAccess.OrdemDigitacao.ExcluirAdministradoConcorrente
            ResourceAccess.OrdemDigitacao.ExecutarDistribuicaoAdministradoConcorrente
        */
        public bool Excluir(List<BusinessEntity.Parameter.ExcluirOrdemDigitacao> pListExcluirOrdemDigitacao)
        {

            BusinessLogic.Negocio validarEstadoSistema = new Negocio();
            validarEstadoSistema.ValidarEstadoSistema(Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.ModuloChamador.ControleOrdens);

            ResourceAccess.OrdemDigitacao kill = new ResourceAccess.OrdemDigitacao();
            Sinacor.Servico.Bovespa.Ordens.BusinessEntity.OrdemDigitacao distr =  new Sinacor.Servico.Bovespa.Ordens.BusinessEntity.OrdemDigitacao();

            foreach (BusinessEntity.Parameter.ExcluirOrdemDigitacao excluir in pListExcluirOrdemDigitacao)
            {
              
                   
                
                distr.DataOrdem = excluir.DataOrdem;
                distr.NumeroOrdem = excluir.NumeroOrdem;
                distr.NumeroSequenciaDigitacao = excluir.NumeroOrdemSequenciaDistribuicao;
                distr.NumeroOrdemSubSequencia = excluir.NumeroOrdemSubSequencia;
                distr.TipoDistribuicao = excluir.TipoDistribuicao;
                distr.DataMovimento = excluir.DataMovimento; 
                
                if (excluir.TipoOrdemDistribuicao == BusinessEntity.Enum.TipoOrdemDistribuicao.POP)
                {
                    kill.ExcluirPOP(excluir);
                    kill.ExecutarDistribuicaoPOP(distr);
                }
                else
                {
                    kill.ExcluirAdministradoConcorrente(excluir);
                    kill.ExecutarDistribuicaoAdministradoConcorrente(distr);
                }
            }

            return true;
        }
    }


}

